#include <iostream>
#include <unistd.h>
#include <signal.h>

int main()
{
    // 将SIGCHILD信号的处理模式手动改为IGN,进程在收到子进程结束的信号后会自动回收僵尸进程
    // 虽然查man手册发现SIGCHILD的默认处理方式也是ignore,但那是DEF的处理方式
    // 手动设置IGN和DEF默认处理IGN的方式 是两回事
    // signal(SIGCHLD, SIG_IGN);
    signal(17, SIG_IGN); // SIG_DFL -> action -> IGN

    for (int i = 0; i < 10; i++)
    {
        pid_t id = fork();
        if (id == 0)
        {
            while (true)
            {
                std::cout << "I am child process: " << getpid() << ", ppid: " << getppid() << std::endl;
                sleep(5);
                break;
            }
            std::cout << "child quit!!!" << std::endl;
            exit(0);
        }
        sleep(1);
    }

    while (true)
    {
        std::cout << "I am father process: " << getpid() << std::endl;
        sleep(1);
    }

    return 0;
}